<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>
<script>
    // 4. 数组去重 有一个数组 var list = [1, 2, 3, 3, 1, 2, 2, 1, 3, 1, 3, 2, 1, 1, 2, 3, 3] -> 去除重复项[1, 2, 3]


    // 删除去重 => 从前向后依次遍历 -> 删除重复项

    var list = [1, 2, 3, 3, 1, 2, 2, 1, 3, 1, 3, 2, 1, 1, 2, 3, 3];

    // 问题: 理论是正确的 -> 总有漏网之鱼
    // 分析: 前面的元素被删除之后 -> 后面的元素会批量向前移动,占据被删除的元素的位置 (数组塌陷)  ->  如何解决?

    // a. 从后向前删

    // 问题代码:
    // // index    0  1  2  3  4  5  6
    // var list = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]

    // for (var i = 0; i < list.length - 1; i++) {
    //     // list[i]  第一次取一个位置 0
    //     // list[i]  第二次取二个位置 1
    //     for (var j = i + 1; j < list.length; j++) { //后面所有的
    //         // list[j] 后面的每一个
    //         if (list[i] === list[j]) {
    //             list.splice(j, 1);
    //         }

    //     }
    // }
    // console.log(list);



    // 解决1: 从后向前删
    // index    0  1  2  3  4  5  6
    // var list = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]

    // for (var i = 0; i < list.length - 1; i++) {
    //     // list[i]  第一次取一个位置 0
    //     // list[i]  第二次取二个位置 1
    //     for (var j = list.length - 1; j >= i + 1; j--) { //后面所有的
    //         // list[j] 后面的每一个
    //         if (list[i] === list[j]) {
    //             list.splice(j, 1);
    //         }

    //     }
    // }
    // console.log(list);


    // 解决2: 删除完毕 下一次还从当前位置删除
    // index    0  1  2  3  4  5  6
    // var list = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]

    // for (var i = 0; i < list.length - 1; i++) {
    //     // list[i]  第一次取一个位置 0
    //     // list[i]  第二次取二个位置 1
    //     for (var j = i + 1; j < list.length; j++) { //后面所有的
    //         // list[j] 后面的每一个
    //         if (list[i] === list[j]) {
    //             list.splice(j, 1);
    //             j--;
    //         }
    //     }
    // }
    // console.log(list);


    // 方法3: 新建数组去重
    var arr = [];

    for (var i = 0; i < list.length; i++) { // 遍历原数组每一个元素
        var item = list[i];
        if (arr.indexOf(item) == -1) { // 新数组中不存在
            arr.push(item);
        }
    }
    console.log(arr);



    // 方法4:  伪数组转真数组  Array.from()   Set构造函数
    // var list = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
    // var s = new Set(list);
    // var arr = Array.from(s);
    // console.log(arr);

    // day09
    // 对象
    // 值类型和引用类型
    // 浅复制和深复制
    // 数组的遍历方法  forEach map filter some every




</script>

</html>